#include <stdio.h>
#include <string.h>
/**
 * 给定100个人站成一圈，从第1个人开始依次报数。
 * 每数到3的人将会被淘汰，然后继续从下一个人开始报数。
 * 这个过程会一直持续，直到所有的人都被淘汰。
 * 请编写一个C语言程序来模拟这个过程，并且输出每一个被淘汰人的编号。
 * 要求：输出每一个被淘汰人的编号，每淘汰一个人输出一行，格式为："%d out \n"(每输出一次换行)
*/

#define ALL_NUM    	100 
#define COUNT_NUM	3
#define OUT_NUM		3

/* people id array such as (1,2,3,4,5,6) */
int people[ALL_NUM];
int remain_people_indexs[ALL_NUM];
int temp_remain_people_indexs[ALL_NUM];

int main(void)
{
	int left;	/* 剩余人数 */
	int pos;	/* 当前报数位置 */
	int step;
	//设置people的id
	for (int i=0;i<ALL_NUM;i++){
		people[i] =i+1;

	}	
	for(int i=0;i<ALL_NUM;i++){
		remain_people_indexs[i]=i;
	}
	//TODO
	int obsolete_people_id;
	int temp_left = 100;
	left = 100;
	step = 0;
	while(left>0){

		//一轮处理
		int remain_people_index = 0;
		int temp_remain_people_index=0;

		while(remain_people_index <left){

			pos    = remain_people_indexs[remain_people_index];//当前报数的人所在的index
			obsolete_people_id  = people[pos];//当前报数的人的id
			step = step+1;//当人报的数

			if( step == 3 ){//对淘汰的人进行处理
				printf( "%d out \n",obsolete_people_id);
				step=0;
				temp_left --;
			}else{//对非淘汰的人处理
				temp_remain_people_indexs[temp_remain_people_index] = pos;
				temp_remain_people_index ++;
			}
			remain_people_index++;	
		}

		//记录新一轮数据
		memcpy(remain_people_indexs,temp_remain_people_indexs,sizeof(remain_people_indexs[0])*ALL_NUM);
		left = temp_left;
	}	
	

	return 0;
}
